
from datetime import datetime
"""
    季度：
    一季度：1.1-3.31
    二季度：4.1-6.30
    三季度：7.1-9.30
    四季度：10.1-12.31
    财报包含：
    一季报：1.1-3.31
    中报：1.1-6.30
    三季报：1.1-9.30
    年报：1.1-12.31
    公司年报公布（财报）时间：
    一季报：4.1-4.30  1个月
    中报：7.1-8.31  2个月
    三季报：10.1-10.31  1个月
    年报：次年1.1-次年4.30  4个月
"""


class FilterDateCondition:
    """i问财“白马股”筛选条件
        需求：输入指定日期如：2019.5.30或者now，则输入正确的i问财筛选条件
    """
    def __init__(self, input_date):
        self.input_date_str = input_date if input_date.lower() != 'now' \
            else datetime.strftime(datetime.now(), "%Y.%m.%d")
        # 输入的日期字符串格式化为日期数据类型
        self.input_date = datetime.strptime(self.input_date_str, '%Y.%m.%d')
        # 输入的年份字符串
        self.input_year_str = self.input_date_str.split('.')[0]
        # 输入的月份字符串
        self.input_month_str = self.input_date_str.split('.')[1]
        self.listed_str = f"早于{int(self.input_year_str) - 5}年{self.input_month_str}月" if input_date.lower() != 'now' \
            else "大于5年"
        # 年报公布（财报）时间
        self.first_quarterly_report = f"{self.input_date_str.split('.')[0]}.4.1~" \
                                      f"{self.input_date_str.split('.')[0]}.4.30"
        self.second_quarterly_report = f"{self.input_date_str.split('.')[0]}.7.1~" \
                                       f"{self.input_date_str.split('.')[0]}.8.31"
        self.third_quarterly_report = f"{self.input_date_str.split('.')[0]}.10.1~" \
                                      f"{self.input_date_str.split('.')[0]}.10.31"
        self.fourth_quarterly_report = f"{int(self.input_date_str.split('.')[0]) + 1}.1.1~" \
                                       f"{int(self.input_date_str.split('.')[0]) + 1}.4.30"

    def date_handler(self):
        """条件计算"""
        if datetime.strptime(self.third_quarterly_report.split('~')[1], '%Y.%m.%d') < self.input_date:
            search_condition = f"{int(self.input_year_str) - 7}年到{int(self.input_year_str) - 1}年ROE≥15%，" \
                               f"{self.input_year_str}年9月30日ROE≥11.25%，上市时间{self.listed_str}，" \
                               f"行业，{self.input_year_str}年9月30日营收增长率，{self.input_year_str}年9月30日净利润增长率，" \
                               f"{int(self.input_year_str) - 1}年营收增长率，{int(self.input_year_str) - 1}年净利润增长率"
        elif datetime.strptime(self.second_quarterly_report.split('~')[1], '%Y.%m.%d') < self.input_date:
            search_condition = f"{int(self.input_year_str) - 7}年到{int(self.input_year_str) - 1}年ROE≥15%，" \
                               f"{self.input_year_str}年6月30日ROE≥7.5%，上市时间{self.listed_str}，" \
                               f"行业，{self.input_year_str}年6月30日营收增长率，{self.input_year_str}年6月30日净利润增长率，" \
                               f"{int(self.input_year_str) - 1}年营收增长率，{int(self.input_year_str) - 1}年净利润增长率"
        elif datetime.strptime(self.first_quarterly_report.split('~')[1], '%Y.%m.%d') < self.input_date:
            search_condition = f"{int(self.input_year_str) - 7}年到{int(self.input_year_str) - 1}年ROE≥15%，" \
                               f"{self.input_year_str}年4月30日ROE≥3.75%，上市时间{self.listed_str}，" \
                               f"行业，{self.input_year_str}年4月30日营收增长率，{self.input_year_str}年4月30日净利润增长率，" \
                               f"{int(self.input_year_str) - 1}年营收增长率，{int(self.input_year_str) - 1}年净利润增长率"
        else:
            search_condition = f"{int(self.input_year_str) - 8}年到{int(self.input_year_str) - 2}年ROE≥15%，" \
                               f"{int(self.input_year_str) - 1}年9月30日ROE≥11.25%，" \
                               f"上市时间{self.listed_str}，行业，" \
                               f"{int(self.input_year_str) - 1}年9月30日营收增长率，{int(self.input_year_str) - 1}" \
                               f"年9月30日净利润增长率，" \
                               f"{int(self.input_year_str) - 2}年营收增长率，{int(self.input_year_str) - 2}年净利润增长率"
        return search_condition


if __name__ == '__main__':
    while True:
        input_date_str = input("请输入日期（now表示此刻，N表示退出）：")
        if input_date_str == 'N':
            break
        fdc = FilterDateCondition(input_date_str)
        result = fdc.date_handler()
        print("得出i问财搜索条件：\n", result)
